﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
using DynaSpace.Entity;
using DynaSpace.Input;
using DynaSpace.Menu;

namespace DynaSpace
{
	/// <summary>
	/// Hlavní herní třída DynaSpace
	/// </summary>
	public sealed partial class DynaGame
	{
		#region Fields
		
		// -- základní objekty --
		internal GraphicsDeviceManager graphics;
		internal SpriteBatch spriteBatch;
		Viewport defaultViewport;
		
		// -- objekty hry --
		internal Playground p;

		// -- FPS --
		internal DateTime lastFpsCheck;
		internal int lastFpsCounter = 0;
		internal float fps;

		// -- rozšíření
		internal MenuContainerCollection menus;
		internal Color backGroundColor = new Color(193, 213, 233);

		#endregion

		#region Properties

		/// <summary>
		/// Vrací hlavní <see cref="Viewport"/> celé obrazovky
		/// </summary>
		public Viewport DefaultViewport
		{
			get
			{
				return defaultViewport;
			}
		}

		/// <summary>
		/// Vrací aktuální <see cref="GraphicsDeviceManager"/>
		/// </summary>
		public GraphicsDeviceManager Graphics
		{
			get
			{
				return graphics;
			}
		}

		/// <summary>
		/// Vrací objekt pro vytváření seznamů menu
		/// </summary>
		public MenuContainerCollection Menus
		{
			get
			{
				return menus;
			}
		}

		/// <summary>
		/// Vrací nebo nastavuje barvu pozadí
		/// </summary>
		public Color BackGroundColor
		{
			get { return backGroundColor; }
			set { backGroundColor = value; }
		}

		/// <summary>
		/// Vrací aktuální FPS hry
		/// </summary>
		public float Fps
		{
			get
			{
				return fps;
			}
		}

		/// <summary>
		/// Vrací nebo nastavuje <see cref="Playground">herní plochu</see>
		/// </summary>
		public Playground Playground
		{
			get
			{
				return this.p;
			}
			set
			{
				p = value;
			}
		}

		#endregion
	}
}
